class MyThread extends Thread{
    @Override
    public void run() {
        System.out.println("继承Thread类，重写run()!");
    }
}

class MyRunnable implements Runnable{
    @Override
    public void run() {
        System.out.println("实现Runnable接口，重写run()!");
    }
}
public class ThreadTest {
    public static void main(String[] args) {
        // 法三：继承Thread类，重写run()，使用匿名内部类
        Thread t3 = new Thread(){
            @Override
            public void run() {
                System.out.println("继承Thread类，重写run()，使用匿名内部类!");
            }
        };
        // 法四：实现Runnable接口，重写run()，使用匿名内部类!
        Thread t4 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("实现Runnable接口，重写run()，使用匿名内部类!");
            }
        });
        // 法五：使用lambda表达式
        Thread t5 = new Thread(()->{
            System.out.println("使用lambda表达式!");
        });


        // 法一：继承Thread，重写run()
        Thread t1 = new MyThread();


        // 法二：runnable类实现Runnable接口，重写run()，再实例化线程对象
        Runnable runnable = new MyRunnable();
        Thread t2 = new Thread(runnable);

        t1.start();   // 创建一个线程对象
        t2.start();
        t3.start();
        t4.start();
        t5.start();
        System.out.println("Hello main Thread!");
    }
}
